import _ from 'lodash'

export const filterParseMap = new Map([
    ['input', 'text'],
    ['inputNoLabel', 'text'],
    ['select', 'enum'],
    ['selectNoLabel', 'enum'],
    ['date_range', 'daterange'],
    ['date_time', 'datetime'],
    ['date_time_range', 'datetime'],
])

export function parseFilter(data, defaultFilters) {
    // eslint-disable-next-line sonarjs/cognitive-complexity
    return _.map(data, option => {
        const {type, key, name, placeholder, isMultiple, item, defaultValue} = option
        const fieldType = filterParseMap.get(type)
        const configItem = {
            field_type: fieldType,
            field_id: key,
            field_name: type === 'selectNoLabel' || 'inputNoLabel' ? '' : name,
            placeholder,
            is_multiple: isMultiple,
            options: item,
            defaultValue: defaultValue,
        }
        // 日期选择框
        if (fieldType === 'daterange') {
            _.assign(configItem, {'value-format': 'yyyy-MM-dd'})
        }
        // 日期+时间选择框
        if (fieldType === 'datetime') {
            _.assign(configItem, {'dateFormat': 'yyyy-MM-dd HH:mm:ss'})
        }
        // 多选下拉框
        if (fieldType === 'enum' && isMultiple) {
            _.assign(configItem, {
                'collapse-tags': true,
                defaultValue: []
            })
        }
        // 是否存在默认值
        if (defaultFilters) {
            // 是否有对应值
            let defaultFilterValue = defaultFilters[key]
            if (!_.isNil(defaultFilterValue)) {
                //  多选
                if (fieldType === 'enum' && isMultiple) {
                    // 是否存在反向选择
                    const non = _.get(defaultFilterValue, 'non')
                    if (_.isArray(non)) {
                        // 反向筛选
                        defaultFilterValue = _.reduce(item, (result, {value}) => {
                            if (!_.includes(non, value)) {
                                result.push(value)
                            }
                            return result
                        }, [])
                    } else if (!_.isArray(defaultFilterValue)) { // 多选，但传过来的不是数组则转为数组
                        defaultFilterValue = [defaultFilterValue]
                    }
                }
                _.set(configItem, 'defaultValue', defaultFilterValue)
            }

        }
        return configItem
    })
}
